""""""
"""
装饰器
装饰器其实也是一种闭包. 其功能就是在:
不破坏目标函数原有的代码和功能的前提下, 为目标函数添加新功能
"""


def 睡眠1():
    import random  # 随机包
    import time  # 时间包
    print("睡眠中1.....")
    time.sleep(random.randint(1, 5))  # 时间.睡眠(随机.随机数字(1到5))


# 睡眠()

"""
装饰器 有2种写法

一  装饰器的一般写法(闭包写法)

定义一个闭包函数,在闭包函数内部:
执行目标函数
并完成功能的添加
"""


# 闭包写法
def 外部(形参):  # 这个形参,接收另一个 函数
    def 内部():  # 闭包
        print("准备睡觉了....")
        形参()  # 内部调用外部形参变量
        print("已经起床了....")
    return 内部


# 准备 = 外部(睡眠1)  # 把函数作为参数,传进去
# 准备()
# 这样我们在不修改函数 "睡眠" 的前提下,追加了新的功能

"""
装饰器的第2种写法

二  装饰器的语法糖写法

使用 @函数名
定义在目标函数之上
"""


@外部  # "外部"是函数名
def 睡眠2():
    import random  # 随机包
    import time  # 时间包
    print("睡眠中2.....")
    time.sleep(random.randint(1, 5))  # 时间.睡眠(随机.随机数字(1到5))


睡眠2()  # 运行我们看到同时,添加新的功能   而不需要上面的传参,  这里我们直接用的是本身的函数

"""
通过上面的例子我们看到
装饰器 其实就是:
装饰器就是使用创建一个闭包函数, 在闭包函数内调用目标函数(把目标函数作为,外部变量传入)

以达到不改动目标函数的同时,增加额外的功能
"""

